package code.example.base.collection.queue;

import code.example.tool.LogFactory;

import java.util.PriorityQueue;
import java.util.Queue;

/**
 * PriorityQueue 一个排序Queue ，内部使用数组，默认初始化大小==11
 *
 *  排序: 需要元素实现Comparable 或 实例化PriorityQueue 时指定Comparator实例,小的在队列前面.
 *        队列中的元素是从小大到的顺序,所有排序采用二分法排序.
 *  算法：内部采用二叉树，每次offer 或 poll 之后，通过替换元素，使0下标为最小或最大的元素。
 *  扩容:空间不够时,如当前空间小于64,则扩2倍,否则扩容1.5倍.
 *
 *  非线程安全.
 */
public class TestPriorityQueue {

    public void test(){
        Queue<Person> queue =new  PriorityQueue<>();
        for(int i=100;i>0;i--){
            Person person =new Person();
            person.setName("N-"+i);
            person.setMoney(i*100);
            queue.offer(person);
        }
        Person person ;
        while( (person= queue.poll()) != null){
            LogFactory.getLog().info(person.toString());
        }
    }


    public static void main(String [] args){
        new TestPriorityQueue().test();
    }
}
